package implementacao;

import static implementacao.Constantes.*;

import java.util.Random;


public class FornecedorDeSenha {

	private Senha senha;

	public FornecedorDeSenha(Senha s) {
		this.senha = s;
	}

	public FornecedorDeSenha() {

	}

	public Retorno getRetorno(Tentativa tentativa) {
		Retorno r = new Retorno();

		for (int i = 0; i < 4; ++i) {
			int idx = senha.indexOf(tentativa.get(i));
			if (idx == -1) {
				r.set(i, VAZIO);
			} else if (idx == i) {
				r.set(i, PRETO);
			} else {
				r.set(i, BRANCO);
			}
		}

		ordenarPinos(r);

		return r;
	}

	/**
	 * Ordena os pinos na seguinte ordem: PRETO - BRANCO - VAZIO.
	 */
	private void ordenarPinos(Retorno r) {
		for (int i = 0; i < 4; ++i) {
			for (int j = i; j < 4; ++j) {
				if (r.get(i) < r.get(j)) {
					r.swap(i, j);
				}
			}
		}
	}

	public void criarSenha() {
		Random r = new Random();
		int[] arrayDaSenha = new int[4];
		for(int i = 0; i < 4; ++i) {
			arrayDaSenha[i] = 1 + r.nextInt(8);
		}
		this.senha = new Senha(arrayDaSenha);
	}

	public Senha getSenha() {
		return senha;
	}

}
